<?php

namespace Modules\Admin\Service;
use Modules\Admin\Entities\Modules;

/**
 * 处理跟新路由缓存的类
 * Class ModuleService
 * @package Modules\Admin\Service
 */
class ModuleService
{
    /**
     * 跟新路由缓存方法
     */
    public function updataCache(){

//        因为每次添加的信息条数都会进行累加，不美观，所以在此将添加之前的信息条数都进行表截断处理
//        将表名为 modules 的表进行表截断处理
        \DB::table('modules')->truncate();


        //想要实现点击时的页面切换，就需要通过数据库中的是否为默认模板/是否有显示模板的前台控制器的index方法。来实现那个模板显示，那个模板隐藏
//        想要的到这两个参数首先需要获得模块列表，方法参考houdunren手册的模块方法
        //此方法不传参数就是获得所有模块列表
        $Modules = \HDModule::getModulesLists();
//        dd($Modules);
//        循环所有模块，将数据逐条存在modules表中
//       循环
        foreach ($Modules as $v){
//            模块中进行逐条添加
//          模块名:: createc()添加->项模型中添加数据，一个模型对应的是一张表！
            Modules::create([
//                向表中的name字段添加循环出来的模块的数据name
            //英文标识
               'name' => $v['name'],
               //中文名称
               'title' => $v['title'],
               //默认选项
               'is_default' => 0,
               //是否能否访问  调用下面的判断方法，返回值为布尔值，通过真假来限定是否能够访问
               'home_access' => $this->is_home_access($v),
            ]);
        }
    }

    /**
     * 判定模块是否存在访问权限，
     * 通过检测要访问的模块中是否存在HomeController这个类以及是否有index方法，如果这两个同属存在，我们就能访问，如果有一个不存在，我们就不能访问
     */
    public function is_home_access($modules){

//        拼接出Homecontroller类的命名空间路径
        $class= '\Modules\\'.$modules['name'].'\Http\Controllers\HomeController';
//        判断HomeController这个类中是否存在叫index的方法
        //判断要访问的模块中是否存在我们要的类以及index方法
        return class_exists($class) && method_exists($class,'index');
    }

//    获取当前设置的默认模块的方法
    public static function getDefault(){
//        通过where条件来找到数据库中is_default/home_access两个字段都为1的数据,将找到的这条数据拿出来
        $model=Modules::where([
            ['home_access',1],
            ['is_default',1],
        ])->first();
//        将这条数据用依赖注入的形式传递进根路由中进行操作
//        为了防止设置为默认的页面出现问题，所以我们设置一个备用可以进行访问的模块
//        进行三元判断
        $model=$model ? $model:Modules::where('name','Shop')->first();
        return $model;

    }


}

?>